package com.zmh.dao;

import java.awt.RadialGradientPaint;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import com.zmh.common.DateUtil;
import com.zmh.common.OperationUtil;
import com.zmh.model.wechat.httpClient.MessageInfo;

/**
 * 微信发送消息列表操作
 * @author zhoumh
 * @version 创建时间：2017年11月5日 下午2:45:16 
 * @Description
 */
@Repository
public class MessageInfoDao {
	@Autowired
	private JdbcTemplate jdbcTemplate;
	/**
	 * 查询全部消息
	 * @return: List<MessageInfo> 消息集合
	 * @author: zhoumh
	 * @version: 创建时间：2017年11月5日 下午3:15:07 
	 * @Description:
	 */
	public List<MessageInfo> selMsgByAll(){
		String sqlstr = "SELECT id, uuid, sendmode, content, openid, sendtime, status, type, state, createtime, updatetime, description FROM messageinfo";
		List<MessageInfo> messageInfos = new ArrayList<>();
		messageInfos = jdbcTemplate.query(sqlstr,
				new RowMapper<MessageInfo>(){
				@Override
				public MessageInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
					return objSet(rs, rowNum);
				}
				});
		return messageInfos;
	}
	/**
	 * 根据状态查询送消息总数
	 * @param state 消息发送状态
	 * @return: int 总条数
	 * @author: zhoumh
	 * @version: 创建时间：2017年11月5日 下午2:47:50 
	 * @Description:
	 */
	public int sumMsgByState(String status){
		String sqlstr = "SELECT count(id) FROM messageinfo WHERE status = ?";
		Object[] param = new Object[]{status};
		int count = jdbcTemplate.queryForObject(sqlstr,param,Integer.class);
		return count;
	}
	
	/**
	 * 根据备和发总状态查询消息总数
	 * @param state 消息发送状态
	 * @return: int 总条数
	 * @author: zhoumh
	 * @version: 创建时间：2017年11月5日 下午2:47:50 
	 * @Description: 查询微信最后一条发送ID有没有已提交的待发送消息
	 */
	public int sumMsgByDesc(String description,String status){
		String sqlstr = "SELECT count(id) FROM messageinfo WHERE description = ? AND status = ?";
		Object[] param = new Object[]{description,status};
		int count = jdbcTemplate.queryForObject(sqlstr,param,Integer.class);
		return count;
	}
	/**
	 * 根据时间和内容查询今天是否已全部提交日志
	 * @param description
	 * @param status
	 * @return 
	 * @return: int
	 * @author: zhoumh
	 * @version: 创建时间：2017年11月18日 下午9:39:43 
	 * @Description:
	 */
	public int sumMsgBySubmit(String date){
		String sqlstr = "SELECT count(id) FROM messageinfo WHERE type = '2' AND createtime BETWEEN ? AND ? AND content like '%已全部提交%'";
		String begin = date+" 01:00:00";
		String end = date+" 23:59:59";
		Object[] param = new Object[]{begin,end};
		int count = jdbcTemplate.queryForObject(sqlstr,param,Integer.class);
		return count;
	}
	/**
	 * 根据状态和时间分页查询消息
	 * @param state 消息发送状态
	 * @param sendtime 消息发送的时间
	 * @param begin 开始条数
	 * @param count 返回结束条数
	 * @return: List<MessageInfo> 消息内容
	 * @author: zhoumh
	 * @version: 创建时间：2017年11月5日 下午2:52:16 
	 * @Description:
	 */
	public List<MessageInfo> selMsgByST(String status,String sendtime,int begin,int count){
		String sqlstr = "SELECT id, uuid, sendmode, content, openid, sendtime, status, type, state, createtime, updatetime, description FROM messageinfo WHERE status = ? AND sendtime <= ? LIMIT ?, ?";
		List<MessageInfo> messageInfos = new ArrayList<>();
		Object[] param = new Object[]{status,sendtime,begin,count};
		messageInfos = jdbcTemplate.query(sqlstr, param, new RowMapper<MessageInfo>(){
				@Override
				public MessageInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
					return objSet(rs, rowNum);
				}
				});
		return messageInfos;
	}
	/**
	 * 添加发送消息
	 * @param messageInfo 消息对象
	 * @return: int 增加成功条数
	 * @author: zhoumh
	 * @version: 创建时间：2017年11月5日 下午2:58:59 
	 * @Description:
	 */
	public int insMsg(MessageInfo messageInfo){
		String sqlstr = "INSERT INTO messageinfo (uuid, sendmode, content, openid, sendtime, type, description) VALUES (?, ?, ?, ?, ?, ?, ?)";
		Object[] param = new Object[]{OperationUtil.getUUID(),messageInfo.getSendmode(),messageInfo.getContent(),messageInfo.getOpenid(),messageInfo.getSendtime(),messageInfo.getType(),messageInfo.getDescription()};
		int result = jdbcTemplate.update(sqlstr, param);
		return result;
		
	}
	/**
	 * 根据uuid修改消息
	 * @param messageInfo 消息对象
	 * @return: int 修改成功条数
	 * @author: zhoumh
	 * @version: 创建时间：2017年11月5日 下午3:15:49 
	 * @Description:
	 */
	public int updMsgByUuid(MessageInfo messageInfo){
		String sqlstr = "update messageinfo set sendmode=?, content=?, openid=?, sendtime=?, status=?, type=?, state=?, updatetime=?, description=? where uuid=?";
		Object[] param = new Object[]{messageInfo.getSendmode(),messageInfo.getContent(),messageInfo.getOpenid(),messageInfo.getSendtime(),messageInfo.getStatus(),messageInfo.getType(),messageInfo.getState(),DateUtil.getDateTime(),messageInfo.getDescription(),messageInfo.getUuid()};
		int result = jdbcTemplate.update(sqlstr, param);
		return result;
	}
	
	/**
	 * 根据uuid删除消息
	 * @param uuid uui条数d
	 * @return: int 删除
	 * @author: zhoumh
	 * @version: 创建时间：2017年11月5日 下午3:17:07 
	 * @Description:
	 */
	public int delMsgByUuid(String uuid){
		String sqlstr = "delete from messageinfo where uuid = ?";
		Object[] param = new Object[]{uuid};
		int result = jdbcTemplate.update(sqlstr, param);
		return result;
	}
	/**
	 * 根据类型和状态删除消息
	 * @param status 消息状态，发送/未发送
	 * @param type 消息类型 书籍/工作/微信最后一条
	 * @return: int 删除成功的条数
	 * @author: zhoumh
	 * @version: 创建时间：2017年11月14日 下午3:17:07 
	 * @Description: 删除微信最后一条类型的未发送消息
	 */
	public int delMsgByType(String type,String status){
		String sqlstr = "delete from messageinfo where status = ? AND type = ?";
		Object[] param = new Object[]{status,type};
		int result = jdbcTemplate.update(sqlstr, param);
		return result;
	}
	/**
	 * 数据库查询结果映射
	 * @author zhoumh
	 * @version 创建时间：2017年8月15日 上午11:36:14
	 */
	private MessageInfo objSet(ResultSet rs, int rowNum) throws SQLException {
		MessageInfo messageInfo = new MessageInfo();
		messageInfo.setId(rs.getInt("id"));
		messageInfo.setUuid(rs.getString("uuid"));
		messageInfo.setSendmode(rs.getString("sendmode"));
		messageInfo.setContent(rs.getString("content"));
		messageInfo.setOpenid(rs.getString("openid"));
		messageInfo.setSendtime(rs.getString("sendtime"));
		messageInfo.setStatus(rs.getString("status"));
		messageInfo.setType(rs.getString("type"));
		messageInfo.setState(rs.getString("state"));
		messageInfo.setCreateTime(rs.getString("createtime"));
		messageInfo.setUpdateTime(rs.getString("updatetime"));
		messageInfo.setDescription(rs.getString("description"));
		return messageInfo;
	}
}
